<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <!-- * Set 是一种类似 数组的 数据结构，但是成员的值是唯一的
      * 本身是一个构造函数 -->
    <script>
      // 创建 new Set(数组)
      var arrSet = new Set([1, 2, 3, 4, 1, 2, 3, 4, 3, 5])
      console.log(arrSet)
      // 没有length 属性  set数据 有.size属性
      console.log(arrSet.size)
      //不能使用数组方法
      // console.log(arrSet.reverse())
      // set数据的方法
      //1) 添加数据 add
      arrSet.add('刘德华').add('汤唯')
      console.log(arrSet)
      //2)删除方法delete("数据")
      arrSet.delete('刘德华')
      console.log(arrSet)
      //3)has()是否存在 返回true和false
      console.log(arrSet.has('汤唯'))
      //4) clear() 清楚set的所有数据
      arrSet.clear()
      console.log(arrSet)

      // 字符串去重
      var str = 'asdfasdfasfajsdfafda'
      let st = new Set(str) //['a','f','d','s']
      let str2 = [...st].join('')
      console.log(str2)

      // set数据类型可以使用 keys() values() entries()
      var arSet = new Set(['11', '22', '33', '22', '33'])
      console.log(arSet.entries())
      for (let k of arSet) {
        console.log(k)
      }
      // set数据 entries() 用for of 获取key和value
      for (let [k, v] of arSet.entries()) {
        console.log(k, v)
      }
      //set数据 可以使用forEach
      arSet.forEach(ele => {
        console.log(ele)
      })
      // 值得注意的是,NaN被Set认为是相同的,{}被认为是不同的
      // var set = new Set([{}, {}])
      // console.log(set); //{{},{}}
      // var set = new Set([NaN, NaN])
      // console.log(set); //{NaN}
    </script>
  </body>
</html>
